package com.cloudlead.common.lang.service;

import com.cloudlead.common.lang.persistence.Filter;
import com.cloudlead.common.lang.persistence.Page;
import com.cloudlead.common.lang.persistence.PageRequest;
import com.cloudlead.common.lang.persistence.Sort;

import java.util.List;

/**
 * 基本增删改查服务
 * 
 * @author Dean
 *
 * @param <VO>
 */
public interface CrudService<VO> extends Service{
	/**
	 * 创建值对象
	 * 
	 * @param vo
	 */
	void create(VO vo);

	/**
	 * 更新值对象
	 * 
	 * @param vo
	 */
	void update(VO vo);

	/**
	 * 批量更新对象
	 * 
	 * @param vo
	 * @param filter
	 */
	void updateAll(VO vo, Filter filter);

	/**
	 * 根据实例批量更新对象
	 * 
	 * @param vo
	 * @param example
	 */
	void updateAll(VO vo, VO example);

	/**
	 * 查看值对象
	 * 
	 * @param id
	 * @return
	 */
	VO view(String id);

	/**
	 * 统计值对象个数
	 * 
	 * @param filter
	 * @return
	 */
	long count(Filter filter);

	/**
	 * 统计实例条件对象个数
	 * 
	 * @param example
	 * @return
	 */
	long count(VO example);

	/**
	 * 查询值对象列表
	 * 
	 * @param filter
	 * @param sort
	 * @return
	 */
	List<VO> list(Filter filter, Sort sort);

	/**
	 * 根据实例条件查询
	 *
	 * @param example
	 * @param sort
	 * @return
	 */
	List<VO> list(VO example, Sort sort);

	/**
	 * 单值查询
	 * 
	 * @param filter
	 * @return
	 */
	VO findOne(Filter filter);

	/**
	 * 根据实例条件做单值查询
	 */
	VO findOne(VO example);

	/**
	 * 分页查询值对象
	 * 
	 * @param pageRequest
	 * @return
	 */
	Page<VO> findAll(PageRequest pageRequest);

	/**
	 * 删除值对象
	 * 
	 * @param id
	 */
	void delete(String id);

	/**
	 * 批量删除对象
	 * 
	 * @param filter
	 */
	void deleteAll(Filter filter);

	/**
	 * 根据实例批量删除对象
	 * 
	 * @param example
	 */
	void deleteAll(VO example);
}
